home *** CD-ROM | disk | FTP | other *** search
- BUFLEN EQU 32768 ; buffer length, alter to taste
-
- CR EQU 0DH ; ASCII carriage return
- LF EQU 0AH ; ASCII line feed
-
- ; DOS 2.x pre-defined handles
- STDIN EQU 0 ; standard input file
- STDOUT EQU 1 ; standard output file
- STDERR EQU 2 ; standard error file
-
- CODE SEGMENT
-
- ASSUME CS:CODE,DS:CODE
-
- ORG 100H ; start .COM at 100H
-
- MUL:
- MUL3: MOV AH,3FH ; read standard input.
- MOV BX,STDIN
- MOV CX,BUFLEN
- MOV DX,OFFSET (BUFFER)
- INT 21H
- JC MUL4 ; JUMP, ERROR.
- MOV NCHAR,AX ; save length of read.
- CMP AX,0 ; nothing read in?
- JNE MUL4A ; if not end of file, skip exit.
- MUL4:
- MOV AX,4C00H ; exit with return code=0.
- INT 21H
- MUL4A: MOV SI,OFFSET (BUFFER)
- MOV DI,SI
- MOV CX,NCHAR
- MUL5: LODSB
- CMP AL,CR
- JZ TURNOF
- CMP AL,';'
- JZ TURNON
- CMP AL,'"'
- JZ TOGGLE
- CMP AL,"'"
- JZ TOGGLE
- CMP BYTE PTR MODE,';'
- JZ DOMASK
- CMP BYTE PTR MODE,0
- JNZ NOMASK
- DOMASK: CMP AL,'A'
- JC NOMASK
- CMP AL,'Z'+1
- JNC NOMASK
- OR AL,20H
- NOMASK: STOSB
- LOOP MUL5
- JMP MUL4B
- TOGGLE: CMP BYTE PTR MODE,';'
- JZ NOMASK
- CMP BYTE PTR MODE,0
- JZ SETIT
- CMP MODE,AL
- JNZ NOMASK
- SETIT: XOR MODE,AL
- JMP NOMASK
- TURNON: CMP BYTE PTR MODE,0
- JNZ NOMASK
- MOV MODE,AL
- JMP NOMASK
- TURNOF: MOV BYTE PTR MODE,0
- JMP NOMASK
- MUL4B: MOV AH,40H ; now write to standard output...
- MOV BX,STDOUT
- MOV CX,NCHAR
- MOV DX,OFFSET (BUFFER)
- INT 21H
- JC MUL7 ; jump, write failed.
- CMP AX,NCHAR
- JNE MUL7 ; jump, write failed.
- JMP MUL3 ; read again until end of file.
-
- MUL7: MOV DX,OFFSET ERR2 ; print "Disk is full".
- MOV CX,OFFSET ERR2LEN
- MOV AH,40H ; display error message and exit.
- MOV BX,STDERR
- INT 21H
- MOV AX,4C02H
- INT 21H
- NCHAR DW 0 ; number of chars actually input.
- MODE DB 0 ; current mode indicator
-
- ERR2 DB CR,LF
- DB 'MUL: Disk is full.'
- DB CR,LF
- ERR2LEN EQU (THIS BYTE)-(OFFSET ERR2)
-
- BUFFER LABEL BYTE ; data is read here from
- ; standard input
-
- CODE ENDS
-
- END MUL
- N EQU (THIS BYTE)-(OFFSET ERR2)
-
- BUFFER LABEL BYTE ; data is read here from
- ; standar